23

» WarCraft 3 / Взлом карты

Похожие вопросы:

ответ
у тебя кусок кода с библиотекой и глобалом
вывод
поставь нормальный редактор
либо ручками j файл правь
ответ
Вон сколько бот ответов выдал хороших, сделай свою карту нормальную без переделок каких либо заброшек
и Ты потом не сможешь её редактировать нормально без знаний JASS. обратно триггеры тебе уже не увидеть точно, возможно придётся даже писать код в блокноте
Тем более это зомби в деревне xgm.guru/p/ziv, автор xgm.guru/user/Fakov был в сети Активность: 01.04.19 01:47
ответ
quq_CCCP, тогда ну нафиг
это полноценный реверс инженеринг уже будет
Asaaaaaar, короче это потребует кучу времени и никто тут этим заниматься скорее всего не будет
думаю даже за платно сложно будет найти того кто согласится убить кучу времени на это
ответ
Нельзя. Потому что даже в твоей сугубо триггерной карте, когда запускается команда на исполнение все конвертируется в jass/( Когда ты играешь или проверяешь карту)
Триггер . лишь графическая оболочка, как бы кубики на которых написаны буквы, но все-равно все происходит на jasse ( уже иногда на lua)
Короче нельзя. скачивай jngp и учи хотя бы простые джассовые команды.
Хотя даже зная его взломанная карта часто выкладывает огромный набор проограмного кода без разделения где конкретный текстовый триггер инициализации или определенного дейсвтия.
ответ
mqp editor/mpq master + notepad++/jasscraft + slk editor + vex's tools

но все делается ручками и никак иначе, данные РО еще можно восстановить, но код/триггеры в "первозданном" виде ты уже не восстановишь, только если вручную

23

» WarCraft 3 / Реалистичный снаряд

Похожие вопросы:

ответ
  1. Думаю, что можно.
Берем основную модель, возможно, вообще без мяса, только с гусеницами, но с кучей точек крепления. Также берем кучу моделей-аттачметов, представляющих собой эти самые пушки, корпуса и все прочее. При выборе характеристик модели через диалог или интерфейс соответственно создаем на основной модели эффекты-аттачменты, будет собрана техника. Такие штуки, как двигатель и прочие невидные извне элементы будут скорее входить в математическую модель юнита, но это также можно запилить. Название танка - сразу не скажу, есть ли триггер на смену, но на таблице рекордов можно отобразить что угодно.

2.Тоже можно.
Создаем погодный в определенной местности и делаем два триггера для контроля входа-выхода юнитов из нее. На искомых юнитов применяем нужные способности - и все готово.

  1. Здесь чуть сложнее: нужно постоянно проверять тип местности под юнитом, но тоже можно. Проверка на ограждения тоже может бить сделана.

4.Это уже интереснее. Видел раньше подобное в играх. При каждой атаке юнита случайным образом наносим или не наносим доп. урон, эффект горения, кидаем спелл на цель в зависимости от теоретического места попадания атаки.

5.И это можно. Но нужно писать нестандартную систему Альянса. Но через триггеры и JASS все можно...

  1. Продажа техники - лучше через способность, что бы кидать ее на понравившегося юнита, не стоит покупать кота в мешке. Стоимость должна зависеть от технического уровня юнита, его текущего состояния (мертвый танк попадет вам бесплатно, сами чините!), если он был модернизован дополнительно, то это тоже входит в стоимость. Разрешение на продажу делаем аналогично.

  1. Это легко через Custom Value и переменние.

Как ты понял, все что ты предложил создать можно, но на это нужно потрать хороший кусок времени. Остается пожелать тебе удачи над созданием проекта - мне идея уже нравится.
ответ
Рассмотрим на примере модельки простого огра, у него есть анимация атаки slam и удар дубиной по земле
  1. Старт атаки
  2. Создаём упреждающий в области впереди героя (маркер, ну эффект ауры например), чтобы игрокам было понятно что скоро тут что-то произойдёт
  3. Проигрываем анимацию "attack slam" или нужную другую, для замаха дубиной, если надо больше и не хватает стандартной скосроти, замедляем скорость анимации
  4. Визуально подгадываем или упытным путём определяем время касания дубиной полна от 1 до 4 сек, на ваше усмотрение
  5. Запускаем новый разовый таймер с нужным периодом, и как таймер сработает, создаём спец эффект, и наносим урон юнитам в области эффекта
(это самый простейший способ, хоть на гуи можно сделать)

23

» WarCraft 3 / Что лучше использовать?

Похожие вопросы:

ответ
TriggerSleepAction
или wait
когда же ты прочтёшь статьи
ибо это одно и тоже
юзай что хочешь
разницы нету
предлагаю закрывать все его вопросы автоматом ибо они все по основам которые описаны в нескольких базовых статьях
ответ
Если в триггере много действий, загружающих память, то лучше не использовать малый период. А если в нём ещё утечки памяти, то рано или поздно лаги сделают игру невозможной.
По сути, и таймер, и периодическое событие запускают действия в определённое время, то есть действуют одинаково. Смотри, что тебе удобнее.
ответ
abatyr, у твоих способностей одинаковый id приказа. Нужно создать способность на основе "Канала", дать им разные id приказа, а настоящие способности кастовать даммиками.
ответ
Протестировал и сказать что лучше нельзя
ReplaceUnitBJ имеет 4 разных варианта
Добавление абилки "Тёмный" это как бы 5-й вариант замены юнита
Тут зависит от конкретного случая кого и что надо заменить.
Да, если заменять юнита на героя (или наоборот) могут возникнуть неполадки
ответ
В варике блокираторы пути 2х2 и 4х4 (маленький и большой). Воздух блочит путь для воздуха, суша для суши, двусторонний для суши и воздуха. Если в одной точке стоят 4 маленьких блокиратора, лучше заменить на один большой блокиратор. А вообще, лучше использовать вариант, который указал quq_CCCP. Там типо с фотошопом надо как-то работать, сетку желательно создать на которой будешь рисовать свой блокиратор пути... Короче на хгм есть где-то статейка, возможно найду


что делает блокиратор поля зрения я без понятия, скорее всего блочит и путь, и поле зрения, если поставить высоту препятствия

23

» WarCraft 3 / Проблема с редактором 1.26

Похожие вопросы:

ответ
Не сов сем по теме, но близко - вот такое можно реализовать на новых функциях 1.31
Увы, полноценного инвентаря на аналогичных функциях пока не выкладывали в общий доступ, каждый пилит себе свою версию.
ответ
Razor_dex, сконвертируй карту, потом открой в стандартном 1.26 редакторе, удали комментарий Рок Лии\Otome Renge
Для гуи-гигантов это типичная болячка, просто битый комментарий который содержит в себе информацию о нескольких действиях, считай как обычный триггер только отображается как комментарий
Возникает такое скорее всего при копировании

P.S. странно что редакторы до 1.31 не обращают внимания на такой баг
ответ
Xgm бот плохо работает... эй... 6 подобный вопрос


23

» WarCraft 3 / Проблема с редактором

Похожие вопросы:

ответ
Проблема решена. Я сделал так: Удалил все триггеры и потом по папочке восстанавливал, когда нашли в чем проблема удалили триггер и все заработало, спасибо за помощь!
ответ
Тебе нужно поставить "Фиксированные настройки игроков" во вкладке Кланы.
ответ
SirDragdord, никак, последние патчи баганые, там много чего не работает, играть там не вочто, хотите поиграть - 1.26а к вашим услугам, старшие патчи вара только для ознакомления и обучения, пока не вышел рефордж там нечего делать.
ответ
~8gabriel8:
Попробуй откатить общий доступ, подозреваю всё-таки его.
ответ
Xgm бот плохо работает... эй... 6 подобный вопрос


23

» WarCraft 3 / Туман войны

Похожие вопросы:

ответ
~8gabriel8:
Импортируй в кампанию шрифт по пути Fonts/FRITZQT__.ttf, только не уверен, что правильное имя у шрифта. Уточни в war3.mpq, там он лежит.
ответ
~8gabriel8:
Если у тебя в JNGP есть это, то можешь там смотреть/менять.
А вообще про путь к шрифту ты же спрашивал: Fonts/FRITZQT__.ttf
ответ
XGM Bot:
Похожие вопросы:

ответ
Эмм что за ерунда, сократил код, убрав всё лишнее, но утечки все равно остаются, по 1.5 - 2 хэндла за каждое нанесение урона (тип хэндла не знаю как посмотреть). Когда триггер отключаешь, то всё нормально.
Сокращенный код
function SDMSCreateTextTag takes nothing returns nothing
    local unit u=GetTriggerUnit()
    local unit s=GetEventDamageSource()
    local integer i=GetConvertedPlayerId(GetOwningPlayer(u))
    local texttag tt=CreateTextTag()
    local real dmg=GetEventDamage()

    if ( dmg > 1.00 ) and ( dmg < 9999.00 ) then
        if GetPlayerId(GetOwningPlayer(u))==12 then
            call SetTextTagText(tt, "|cff9db9eb-"+I2S(R2I(dmg))+"|r", 0.023)
        else
            call SetTextTagText(tt, "|cffffa500-"+I2S(R2I(dmg))+"|r", 0.023)
        endif
        call SetTextTagPosUnit(tt, u, 0)
        call SetTextTagColor(tt, 255, 255, 255, 255) 
        call SetTextTagVelocity(tt, 0.05325*Cos(90 * bj_DEGTORAD), 0.05325*Sin(90 * bj_DEGTORAD))
        call SetTextTagPermanent(tt, false)
        call SetTextTagLifespan(tt, 1.0)
        call SetTextTagFadepoint(tt, 0.0)
    endif
    call PolledWait(2.0)

    call DestroyTextTag(tt)
    set u=null
    set s=null
    set i=0
    set dmg=0
    set tt=null
endfunction

function SDMSTriggerRegisterUnitDamaged takes nothing returns nothing
    call TriggerRegisterUnitEvent(udg_SDMStrigger,GetEnteringUnit(),EVENT_UNIT_DAMAGED)
endfunction

function theSDMSTriggerActions takes nothing returns nothing
    local trigger UnitEnter=CreateTrigger()

    call TriggerRegisterEnterRectSimple(UnitEnter, gg_rct_Arena)
    call TriggerAddAction(UnitEnter,function SDMSTriggerRegisterUnitDamaged)

    set UnitEnter=null
endfunction

function InitTrig_the_SDMS_Trigger takes nothing returns nothing
    local trigger tr=CreateTrigger()

    set udg_SDMStrigger=CreateTrigger()//Тут также меняется название глобальной переменной типа триггер.
    call TriggerAddAction(udg_SDMStrigger,function SDMSCreateTextTag)
    call TriggerRegisterTimerEventSingle(tr,0.0)
    call TriggerAddAction(tr,function theSDMSTriggerActions)

    set tr=null
endfunction
Wait вызывает утечки ((
Пришлось делать через таймер

ответ
~8gabriel8:
Больше похоже на глюк самой карты. Так и не понял, откатить шрифт на стандартный не получается?
ответ
Нужно в игровых константах изменить путь к шрифту.

23

» WarCraft 3 / Wait until

Похожие вопросы:

ответ
MoreDoPass, для этого и нужны массивы, чтобы было MUI
  1. первый триггер сохраняет все нужные данные на один общий индекс, например PlantmineCount, и увеличивает этот индекс на один.
  2. второй триггер каждые 0,0Х секунд пробегается по массиву от нуля до PlantmineCount, проверяет расстояние и если оно подходит, делает нужные действия. После этого, чтобы тот же элемент не обрабатывался заново, нужно заменить его во всех массивах на последний и уменьшить PlantmineCount на 1. И счетчик цикла тоже уменьшить на 1, иначе этот последний элемент будет пропущен тк индекс по циклу уйдет дальше.
ответ
ScorpioT1000, мне кажется, регионы он там не должен создавать =) вот точки да, а регионы же обычно берут из ныне существующих регионов. если создадим его в редакторе, его же и указывают в функции. ниче не создает.
такая гуи-команда странная, не помню такую в boolean. Типа ПРОВЕРКА что все юниты группы в регионе?

в скрине мб локалки не обнулены. там BJ-функции, раскрой и посмотри нет ли их. пример
советовал бы строить по-другому конструкцию.
если честно, не понятно, что за карту ты скинул. я тебе просто пример оптимизации на гуи показал. Но не решения ваших проблем. на jass этого бы не потребовалось, ибо на гуи приходится изворачиваться из-за ограничении команд и утечности bj-функции. там группы утекают, где-то не обнуляют/не удаляют.

Я короче более менее понял вашу ситуацию. 4триггер у вас не будет работать из-за переменной. там надо в фильтре вместо Picked unit ставить Matching Unit. С 4 примером я кажется ошибся. Там у меня по другому работает: выделяю всех из группы и нахожу рандомного юнита, а надо выделить вокруг гг, которые состоят в группе.

23

» WarCraft 3 / Иконка атаки, защиты.

Похожие вопросы:

ответ
система урона + ледяные стрелы = при получении урона, идет проверка на бафф, удаляешь бафф и, либо кастуешь даммиком способность кислотная бомба или духовное пламя с отриц. значением минус в том что бафф будет висеть как положительный. Либо под таймером даешь даешь способность повышения защиты с отриц. значением.
Учитывая что 21 век, систему урона найти и поставить, не составит труда.
ответ
Это стандартная иконка cancel.blp
ответ
Rасательно вопроса как добавить в книгу заклинаний больше 12 скиллов - можно добавить книгу в книгу и новой книге сделать ещё несколько скиллов и ещё 1 или несколько книг. В каждую книгу можно ещё по книге и так далее.
Главное - ID приказа у всех книг должны быть разные.

Иконки способностей кольца, когтей и т.д. отображаться не будут, ты можешь отображать скиллы-пустышки, а (только это на всякий случай предложенный вариант!) герою выдавать сам предмет, предварительно вытряхнув из его инвентаря все предметы на пол. После добавления в пустой инвентарь нужного предмета, например когтей - заполняем ещё 4 слота предметами-пустышками, затем даём предмет со способностью "предметы герой", у этой способности для предмета должна стоять галочка "относится к предмету", обязательно. После этого инвентарь снова очистится уже сам, однако добавленный предмет на атаку будет иметь эффект. После чего можно подобрать с пола предметы героя и отдать ему триггерно.

Почему не стоит добавлять способность когтей триггерно? - потому что 2 добавленные одинаковые способности не суммируются. Два одинаковых предмета же суммируются.
Есть ли минусы у вышеописанного способа? - скорее всего удалить добавленный бонус нормально не выйдет. Придётся вытряхать инвентарь удалением способности "предметы герой" у самого героя, а это тот ещё геморрой -восстановить потом всё, что должно было остаться неудалённым.
ответ
Black Soul:
Прикрепил к сообщению карту. Замена сделана на основе исследования "Ракеты" паровых танков. Думаю, как правильно копировать в свою карту, будет понятно.
8gabriel8, Он имел ввиду не иконку исследования, а вот эту иконку:
В оригинале она не меняется при исследовании улучшений. А он хочет, чтобы менялась.

23

» WarCraft 3 / Музыка на карте

Похожие вопросы:

ответ
Fraps, это просто утечка памяти
десинк вызывают действия происходящие локально (то есть на компьютере 1 игрока они произошли а на компьютере 2 они не происходят)
ответ
Для использования звуков, добавленных вами в карту, вы должны получить к ним доступ через редактор триггеров. После импорта файлов и добавления стандартных звуков или музыки в правую часть списка звуков их можно воспроизводить через редактор триггеров путем использования команд "Звук" - "Воспроизвести звук" или "Звук" - "Воспроизвести музыку".
Статья: xgm.guru/p/wc3/worldedit_guide_6
ответ
Ну, я не помню какой формат там точно нужен
Открой любую карту с музыкой и посмотрим
ответ
"Музыка" используется как музыка?
И запускается через PlayMusic?
ответ
~8gabriel8:
Редактор на русском языке.
Это лишь минус, чтобы убирать такие декорации, нужно поставить под ними область и триггерно воспроизводить для декораций нужного типа в этой области анимацию death либо hide.
Вот примерно где находится нужное тебе действие:
У стандартных спецэффектов обычно анимации stand-обычное состояние, death-гибель, иногда birth-появление, hide-скрыть, show-показать.

23

» WarCraft 3 / Как забыть улучшение

Похожие вопросы:

ответ
Готово!
ответ
Причина: причин было много, а я искал лишь одну
Самыми распространёнными оказались элементарные ошибки в коде, отсутствие параметров, параметры не того типа данных (привет динамическая типизация) или лишние параметры, из за чего происходили "рандомные рассинхроны при обрыве потока"
Огромное спасибо пользователю prog, что откликнулся и смог найти ошибки, а нашёл он их при помощи языкового сервера sumneko lua для VScode

23

» WarCraft 3 / Приказ добычи ресурсов

Похожие вопросы:

ответ
ИИ стандартный, полагаю? Стандартному ИИ вроде как вижн не важен, он и так знает где все находятся, если мне не изменяет память. Как от него не прячься, найдет сразу. Если уж очень хочется - давать юнитов нейтралам и делать их союзным всем ботам. (игроков 16, если не изменяет память). Или давать союзным игрокам, при наличии. По крайней мере не будут мчаться в след за армией. Однако вполне могут быть более качественные решения проблемы, я стандартный ИИ не изучал, не могу быть уверен в офигительности предложенного решения. :)
ответ
Урон по дереву можно отследить с помощью хеша и дерева с 1 хп. Каждому дереву на карте поставить в соответствие n единиц жизней. При смерти дерева проигрывать анимацию получения урона и немедленно возрождать, загружать их хеша значение хп, перезаписывать его и сохранять.
Чтоб проверить что урон нанёс именно рабочий - нужно проверять наличие юнитов определённого типа вокруг дерева с соответствующим приказом, цель которого - это дерево. Для отлова цели приказа также юзается система на всё том же хеше. Нужна бд всем абилкам лесорубов.
Насчёт золота сказать трудно. Нужно посмотреть какие есть состояния юнита и какие из них связаны с пребыванием в руднике, приказы и прочее. Подозреваю что юниты вроде рабочих альянса покидают карту когда заходят в рудник. Но это нужно тестить и костылить. Чистого способа нету.
ответ
biridius, если это есть в РО, то прибегать к триггерам явно не обязательно.

23

» WarCraft 3 / Два уровня предмета?

Похожие вопросы:

ответ
NekoriDes, мб я тупой но зачем тебе 2 триггера с один и тем же событием?
не проще ли запихнуть всё в 1 триггер
хотелось бы увидеть и функции инициализации(создание триггера, добавление событий/условий/действий)
и код лучше кидай txt/j файлом
либо юзай это
ответ
Поскольку его не пугает наличие большого влияния промахов на геймплей - скорее всего он делает рпг. Имхо в рпг всегда клево смотрятся тексттаги полученного урона, для создания которых необходимы триггеры на отлов получения урона. А отлавливаемый урон - можно и прохилить.
Для прохила(и вообще всех манипуляций с задержкой в 0.00 сек) лично я юзаю такие костыли:
Либа здесь только для доп табуляции. Я за чистый жасс + дефайны.
library ZeroTimeEvent

    globals
        constant integer ZTEArraySize = 64//Even 32 is alot, 64 is too much! Exactly what I need!
        timer Zero//Used for 0. sec uses
        integer ZTECurrent = 0
        unit array ZTEUnits[ZTEArraySize]
        integer array ZTEIntegers[ZTEArraySize]
        real array ZTEReals[ZTEArraySize]
        trigger array ZTETriggers[ZTEArraySize]
    endglobals
    
    function ZeroTimeEvent takes nothing returns nothing
            loop
                set  ZTECurrent = ZTECurrent - 1
                call TriggerExecute( ZTETriggers[ZTECurrent] )
                exitwhen ZTECurrent < 1
            endloop
    endfunction
    
    #define ZTEAddUnit(u) = {
        set  ZTEUnits[ZTECurrent] = u
    }
    
    #define ZTEAddInteger(i) = {
        set  ZTEIntegers[ZTECurrent] = i
    }
    
    #define ZTEAddReal(r) = {
        set  ZTEReals[ZTECurrent] = r
    }
    
    #define ConfirmZTE(trig) = {
        set  ZTETriggers[ZTECurrent] = trig
        set  ZTECurrent = ZTECurrent + 1
        call TimerStart( Zero, ZeroTime, false, function ZeroTimeEvent )
    }
    
    
    
endlibrary
Пример использования
#define UnitRemoveForceAttack(u) = {
    call UnitAddAbility( u, 'Abun' )
    call UnitRemoveAbility( u, 'Abun' )
         ZTEAddUnit(u)
         ConfirmZTE(CheckIfUnitHasA002)
}
Минус такой системы в необходимости создавать триггер для каждого блока кода, т.к. массивы блоков кода запрещены

23

» WarCraft 3 / Сравнение Триггеров

Похожие вопросы:

ответ
спасибо всем, подали пару идей. буду работать
ответ
Никак. Регионы и области не сравниваются параметрически, то есть координатами, которые покрывают. Но можно узнать, находится ли точка в том или ином регионе. То есть, в твоем примере, проверить, находится ли юнит одновременно и в tempReg и в tempReg2.
ответ
~8gabriel8:
PT153:
Потому что число 0.01, сложенное 10 раз, меньше 0.1.
Выводи число следующим кодом, где r - твоё real число.
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0., 0., 5., R2SW(r, 0, -1))
PT153:
у парня проблемы с алгоритмом, в какой вселенной 0.01 * 10 не 0.1?
В компьютерной. И да, 0.01 * 10 тоже может быть не равно 0.01 + ... + 0.01. Потому что складываются и умножаются real по-разному.
Hate, надо просто использовать целочисленные, или пользоваться ==, в JASS == округляет числа для сравнения (!= не округляет).

Пороверил разные варианты, сразу упомяну, что с целочисленными всё огонь, просто какие-то другие воспоминания с ними всплывали.
PT153, сначала не понял, зачем мне твоя строчка, она всего лишь выдавала 0.1 вместо 0.100, но тестировал разные варианты и всё прояснилось. Если задавать шаг 1.0, то всё исправно считается до 10.0, если задавать шаг 0.2, то всё считается до 2.2 и отображается ровно, но если сделать шаг 1.01, то вот тут и появляется то, ради чего ты эту строчку дал.
Именно с дробной частью косяк, и теперь не знаю как выбрать лучший ответ, по идее у тебя в каждом комментарии полезная информация. Просто объединил их в итоге.

Hate:
сначала прибавляет, а затем проверяет, потом удивляется почему 0.11
Обычно просто отшучиваюсь на подобные комментарии, но сейчас так всё грустно в нём, что не смогу.
ответ
Способность некоторых зданий ночных эльфов, "Сьесть дерево" в настройках способности есть параметры за кол-во полученого здоровья и времени за которое оно будет восстановлено.
ответ

23

» WarCraft 3 / Как использовать vJass и cJass?

Похожие вопросы:

ответ
//! nocjass
ответ
FabulousTiger, большенству людей сложно влиться в чужой проект если тот абсолютно не отвечает некоторым критериям либо человеку может просто не нравится задумка. И это далеко не та ситуация когда нужно проглотить свое негодование, уровень роботы такого человека будет напрямую зависеть от того насколько ему нравится проект.
KaneThaumaturge, твоя скорость изучения JASS будет напрямую зависеть от того насколько ты в это захочешь втянуться. Правда должен предупредить что есть люди которые просто не приспособлены к тому что-бы понять програмирование в его ярчайшем проявлении, такие люди обычно при разработке проекта опираются на то что умею лучше всего.
Я из опыта скажу что: есть некоторые вещи которые возможно создать только при помощи JASS, но реализацию большенства идей можно выполнить при помощи GUI. Покопайся в чужих наработка пойми что ты хочешь и что можешь использовать из предоставленного тебе и вперед делать проект.
ответ
В свойствах убери заголовочный файл и в линкере с настройками поиграй

23

» WarCraft 3 / ИИ и диалоги

Похожие вопросы:

ответ
[C] - Боевая единица умирает
[У] - Тип боевой единицы == тип "другого юнита"
[Д] - Начать диалог
ответ
Конструкция сделана верно. Только кто должен быть в области, я не понял.
ответ
но условие можно переделать как угодно...например для входящего юнита в область это только пример того как записать диалог в таблицу и очищать хэндл чтобы не вызвал утечек
NazarPunk:
потом я его очищаю
Кто первый клик, того и тапки))
)))
принцип наверное понятен?
можно и не очищать диалог при входе в область hero spawn а потом но лучше очищать заранее
теперь так выглядит
спасибо за ответы
ответ
По диалогам вопрос снят, вроде нашёл. В триггерах. Вопрос актуален по инфе на экране, я так понимаю, что тоже где-то там, но мб подскажите конкретнее?

Все вопросы сняты, разобрался сам =D
ответ
  1. с помощью кода включить нужную анимацию у юнита, разумеется анимация должна быть у модели, у старых варовских моделей анимация разговора была лишь на портрете, это отдельная модель, кроме всяких крипов с мордами в 3 полигона.
  2. Достать то можно - что толку, они имеют иной формат, с ними ниче сделать низя, публичного софта для редактирования и изучения нет, поэтому рефорджевские модели никому и ненужны - ты с ними ниче и не сделаешь.

23

» WarCraft 3 / Помогите вспомнить карту!

Похожие вопросы:

ответ
8gabriel8, точно. Их там нет. Я перепутал. Не в константах, а в интерфейсе.
Текст - Общий - Жульничество разрешено
ответ
закрыт по таймауту
ответ
Eota: Exodus
оригинальный автор DarnYak
поищи его последнюю карту...
помню раньше ещё был оф. сайт... но он вроде упал...
поиграть в эту карту еще. Никто из друзей и знакомых не помнит, но не приснилась же мне эта карта!
не приснилась... хорошая карта, но толпой играть слишком легко...

P.S. а нет, сайт ещё жив, кажется
ответ
ответ
Ага, есть эта карта, забыл как этот дефенс, у нас выкладывали его... Название забыл.

Ага, вот ссыль

23

» WarCraft 3 / Помощь с триггерами

Похожие вопросы:

ответ
  1. а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
    б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
    В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
    Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.
ответ
Вот, должно работать. Если понадобится временное подчинение - таймер поможет.
ответ
XGM Bot:
Похожие вопросы:

ответ
Steal nerves:
Честно я не знаю меняет родная защита и прочие характеристики юнита при использовании тёмный. Давно не игрался с этим. Да и делал я типа кур. Говорят там только модель меняется. А вот перевоплощение да там могут меняться атрибуты и прочее. Если так то редактируйте этого юнита. И вообще проверяйте сами все
При использовании абилы тёмный сам юнит никуда не удаляется, просто модель меняется (сам даже удалял много ещё) - трудно проверить?
Сделал с перевоплощением. Спасибо за идею.
Rare:
А почему ты не можешь просто сделать так,чтобы предмет с твоей броней просто одевался на героя.Это самый простой вариант,в котором есть только одна проблема-найти/сделать модель этого предмета.
Работаю с ВоВ-моделью. Проще сделать много скинов к ней, как в самой ММО, чем модель брони.
ответ
  1. а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
    б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
    В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
    Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.
ответ
Вот, должно работать. Если понадобится временное подчинение - таймер поможет.
ответ
Afterdeath, ну если поймаешь меня сегодня-завтра в Discord'е (discord.gg/Rze5sGP), то могу сделать в лучшем виде.

ответ
Вобщем, с какого-то ... не работал цикл. Пришлось поставить просто подряд много повторяющихся действий (развернуть цикл и прописать отдельно каждое из его повторений), так заработало. Странный этот редактор...
ответ
При осмотре карты тоже не совсем понял почему игра перестает строительство. Как решение, ты можешь даммику строительства поменять расу на нежить, таким образом уже здание само будет достраиваться.
Поскольку у тебя на карте при беглом осмотре юнитов строителей я не заметил, то выше указанное решение как раз то что нужно тебе.
П.С.
Под какую версию игры рассчитана данная карта?

23

» WarCraft 3 / Система полета снарядов

Похожие вопросы:

ответ
Идеальный вариант чтобы игрок сам мог решать, нужно ли ему это. Сделай, если будет смотреться неплохо. И каким то образом запилить возможность выключения этой фичи.
ответ
Проблема решена. Обнаружилась довольно неожиданно - заметил, что во время крита герой не разбивал лицо сам себе, начал искать модификаторы атаки - у героя было 3 пустышки с нулевыми значениями на основе "ракет". При всех пустых значениях вылетает невидимая ракета по самому себе.
ответ
Рассмотрим на примере модельки простого огра, у него есть анимация атаки slam и удар дубиной по земле
  1. Старт атаки
  2. Создаём упреждающий в области впереди героя (маркер, ну эффект ауры например), чтобы игрокам было понятно что скоро тут что-то произойдёт
  3. Проигрываем анимацию "attack slam" или нужную другую, для замаха дубиной, если надо больше и не хватает стандартной скосроти, замедляем скорость анимации
  4. Визуально подгадываем или упытным путём определяем время касания дубиной полна от 1 до 4 сек, на ваше усмотрение
  5. Запускаем новый разовый таймер с нужным периодом, и как таймер сработает, создаём спец эффект, и наносим урон юнитам в области эффекта
(это самый простейший способ, хоть на гуи можно сделать)

23

» WarCraft 3 / Таймер вместо вейт

Похожие вопросы:

ответ
Юзать структуры, свои собственные системы хранения данных.
Если вы только решили слезть с гуи+ вейты на jass, то вам рано думать о таком.
Таймер + хештаблицы в помощь, в статьях есть много информации на эту тему.
Что вам еще непонятно?
ImbaStyle, что есть TriggerSleepActions и timer вам известно?
ответ
Нельзя просто использовать таймер вместо вейта посередине триггера (гуишный вейт именно так и работает - запускает таймер и проверяет циклом каждые 0.1 сек пока он не пройдет).
Но если так уж нужно узнать истек ли таймер:
Real comparison - Обратный отсчет - Remaining time for timer (оставшееся время таймера)
ответ
Ну если у тебя через локалку что-то неправильно иногда работает, значит просто у тебя где-то ошибка (или ты вообще делаешь это не так).
Для того что бы работать парой таймер+юнит впринципе то больше ничего и не нужно - таймер и сам юнит. Но если у тебя должно запускаться параллельно несколько точно таких же таймеров, то тут может подойти массив таймеров (и массив юнитов). При срабатывании одного из таймеров ты можешь ссылаться на юнита записанного под тем же индексом массива ( unit[X] и timer[X] соответственно).
А ещё в триггер можно добавлять события на срабатывания новых таймеров.

23

» WarCraft 3 / Сломалась кампания

Похожие вопросы:

ответ
это кучу систем =) это можно сделать и на гуи.
система домика
  1. ваш домик должен состоять из несколько частей: крыша и стены. Короче это два ваших юнита (крыша и стены). Для начала вам нужно уметь моделировать или попросить модельщика. Можно просто модель готового домика взять (например ферма) и разделить на две части. Трудного ничего нет.
Еще забыл сказать про полы, но это всегда не важная часть. Но пол наверное можно поднять, но поднимать удобнее, если играешь один. А то второй игрок заходит, а пола нет. Для мультиплеера лучше статичный пол
  1. Берем эти модели и даем их двум зданиям, из которых сделаны эти модели. У крыши и стен убираем карту путей, тип движения ставим "нет". Это влияет на движение, просто просто если это не убрать, то юниты упираются в преграду или не могут ставится друг на друга. вот здесь про проходимость и карту путей прочесть можно Только 1 юниту можно перерисовать карту путей (ты смотрел ссылку выше? ладно => xgm.guru/p/wc3/pathing-alternate). Можно снаружи поставить стенки, внутри пустошь. Обычно рисуют прямоугольниками и квадратиками и извнутри тоже все зарисовано, и внутрь юнит никогда не можешь зайти, тк упирается в преграду. Только воздух норм ходит. А если перерисовать так, чтоб были стены и проход внутрь.
  2. есть крыша и стены. когда юнит входит внутрь, то крышу можно делать прозрачной. Короче юнита прозрачным делаем. Можно через гетлокалплеер. Но для этого нужно зарегистрировать, как-то проверить что юнит входит в область
  3. прямоугольником (областью) участок земли должен зарегистрирован в область. Есть даже событие. Правда там область пихают в регион, и на регион вешают событие входа/выхода. Когда юнит входит, крышу делаем прозрачной, и видим что делает там юнит. Когда выходит, прозрачность возвращаем.
Если дом имеет больше 1 этажа, придется делать стены выше, полы 2 этажа.
Есть летающие юниты, которые могут подниматься над декорацией. Это тоже можно использовать. Например движение по лестнице на второй этаж и так далее
Вроде эту систему можно посмотреть тут <= в этой системе юнит может по бочками прыгать и подниматься выше по ним. Можно сделать лестницу какую нибудь. Все зависит от модели, если лестница имеет платформу по наклонной, то и юнит будет лететь по наклонной. Все что надо это тип движения поменять. А меняем через морф
теперь нужно чтобы этот домик можно было разрушить: это проще простого. домик состоит из двух частей: стен и крыши. Короче два здания. По идее крыша это просто декор, и делаем ее неуязвимой. Страдают только стены. По идее юнит должен бить по стенам. Как извнутри не знаю, но должен бить по стенам также. Еще чтобы крыша горела вместе с стенами, то можно вместе с стенами хп отнимать.
Вообще на это влияют пустышки горения см. раздел пустышки

23

» WarCraft 3 / mdlVis

Похожие вопросы:

ответ
Редактор анимаций - скелет - прикрепить выделенные вершины к кости Head.
А лучше статьи почитай по мдлвизу.
А ещё лучше - сам попытайся разобраться.
ответ
~8gabriel8:
Ключевые кадры - КК обозначены на шкале анимации синим, если ты попал в этот кадр, то его номер справа из чёрного станет столь же синим. Например, анимация длится 2000 кадров, от 1000 до 3000 на шкале, а охота сократить её вдвое, для этого просто посчитаю новую позицию КК. Пусть после начального следующий КК стоит на месте 1333, потом 1500 и так далее; для определения позиции вычитаю 1000, делю примерно на два, прибавляю 1000, так первый кадр должен сместиться с 1333 на 1167; попадаю на шкале в 1333, нажимаю C или Ctrl+C, перехожу на 1167 и нажимаю Ctrl+V, а потом убираю кадр на 1333, что можно сделать, попав в него и нажав Del, либо выделив участок с ним и в меню по правой клавише нажав Очистить. Не помню точно, но с выделением на шкале есть какие-то особенности, либо там тянуть выделение надо не левой кнопкой мыши, а правой, либо не всегда срабатывает с первого раза, либо с начала шкалы или до конца не выделяется, в любом случае можешь просто щёлкнуть в одно место, зажать Shift и щёлкнуть во второе место для выделения. Далее 1500 нужно перенести на 1250, всё опять повторяешь. И так до конца шкалы. Потом длительности анимации указываешь не с 1000 до 3000, а с 1000 до 2000.
Как вариант, можно не менять длительность анимации, а сдвинуть пораньше КК, где юнит наносит урон, типа замах укоротить.
P. S. Сначала было очень неудобно это выполнять, но после смещения нескольких шкал анимаций стало получаться весьма шустро. Только нужно постоянно быть внимательным, чтобы не сбиться в расчётах нового местоположения КК, и помнить, чтобы не удалять КК на старом месте раньше установки на новое, а ещё, что C или Ctrl+C были точно нажаты для этого кадра, а не остались от предыдущего)
ответ
всё тему можно закрывать, пару раз сделал то же самое и о чудо всё заработало, в общем спишем на кривизну конвертера :D
P. S. если усидчивости хватит то ожидайте это чудо в разделе модели)
ответ
Надо дополнительно иметь 126 варик, чтобы мдлвис брал от него нужные ему файлы, это самый простой способ из мне известных

23

» WarCraft 3 / Эффект свечения

Похожие вопросы:

ответ
EDIT:
Im terrible sorry but in later wc3 version this model wont work as I planned, apperently teamcolored attatchments wont change color anymore so this model is more or less fucked, im planning on makeing a full series of glows for eatch color but im not sure that i would get approwed here so don't hope to much, once again im sorry.
Но вероятно это только с этой моделью, ибо у меня в wizards world все работает как надо.
ответ
Самое простое - отредактировать стандартные лучи. Сделать их максимально толстыми наверху и обычными пониже, увеличить количество частиц в секунду и время жизни. Можно и переблёскивающийся оттенок сделать сверху на середину.
Если правильно настроить угол падения, то можно добиться, чтобы лучи были видны только по краям камеры.Поищи статью про погоду. Хотя можешь воспользоваться этой картой, но там нет пояснений, только файл погоды и путь.
Редактировать удобнее через SLKEditor
ещё есть вариант наложить интерфейс моделью времени.
ответ
Если мне память не изменяет, то в вк3 можно сделать либо синфазный партикль, либо XY партикль. Последний делается проставлением галочки в соответствующей колонке в магосе (модел эдиторе)
Если XY неподходит, то есть смысл подумать над тем, как-бы сделать такой эффект мешем.
не очень понимаю "Zap'ов", напишите подробно пожалуйста
Он имеет ввиду молнии, как я понимаю. Те, которые используют текстуру zap что-то там .blp
Интересно посмотреть над чем ты там работаешь кстати!
ответ
Можно через пассивную способность без иконки сделать на основе Atol в самой игре.
ответ
~8gabriel8:
По идее там ничего сложного нет. Первый триггер при срабатывании способности объединяет нужное количество юнитов в радиусе действия в [массив], далее всех этих юнитов скрывает, а на месте каждого создаётся дамми с подходящей моделькой (судя по скрину, Волна Силы), которым тоже назначается переменная [массив], индексы массива дамми приравниваются индексам массива юнитов, на месте которых они созданы. Дамми вносятся в группу, которая получает приказ следовать к позиции кастера, после чего включается второй триггер. Второй триггер должен ловить приказ СТОП для юнитов в группе. То есть дамми не должны никак иначе сменить приказ, раз они москиты, лишь при достижении цели пути. Так вот триггер отлавливает приказ стоп у юнита в группе, мгновенно переносит на место москита соответствующего юнита из параллельного массива, делает его видимым, убивает этого москита и убирает из группы. Последним действием проверяется, что если юнитов в группе 0, то удалить группу и отключить триггер.
Надо ещё эффекты нужные подставить и такая система рассчитана на одного юнита с этой способностью, чтобы сделать её MUI, надо потестировать, получают ли дамми при создании приказ СТОП, если нет, тогда отключение и включение второго триггера не требуется и триггер надо лишь немного переделать, а если да, то надо подумать и потестировать.

23

» WarCraft 3 / Наложение Таймеров

Похожие вопросы:

ответ
делаю в таких способностях таким таймерам малый период, время остановки определяю через перезаписываемую целочисленную
^ метод Фрога
в MyAbility проверяй есть ли уже абилка 'A06B' у этого юнита
и если есть - ищи таймер и меняй ему время на новое (опять 25 сек - обновление)
ответ
Там все гораздо проще, на каждого юнита аттачится экземпляр структуры где хранится цель, заклинатель, кол-во урона в сек, и сколько хп у тебя было, по нему высчитывается урон каждые 4 секунды. Тебе ни 10 таймеров ни группы не нужны.

function WC5 takes nothing returns boolean
    local trigger t = GetTriggeringTrigger( )
    local integer S5I = GetHandleId( t )
    local unit P7I = ( LoadUnitHandle( HashData, ( S5I ), ( 2 ) ) )
    local unit P8I = ( LoadUnitHandle( HashData, ( S5I ), ( 17 ) ) )
    local integer SUI = GetUnitAbilityLevel( P7I, 'A0NO' )
    local integer NPI = GetTriggerEvalCount( t )
    local real WD5 = ( LoadReal( HashData, ( S5I ), ( 392 ) ) )
    local real H84 = 0
    if GetTriggerEventId( ) == EVENT_WIDGET_DEATH then
        call DestroyEffect( ( LoadEffectHandle( HashData, ( S5I ), ( 32 ) ) ) )
        call FlushChildHashtable( HashData, ( S5I ) )
        call S0I( t )
    else
        if NPI == 4 or NPI == 8 or NPI == 12 then
            call DestroyEffect( ( LoadEffectHandle( HashData, ( S5I ), ( 32 ) ) ) )
            if NPI == 12 then
                call FlushChildHashtable( HashData, ( S5I ) )
                call S0I( t )
            elseif NPI == 4 or NPI == 8 then
                call SaveEffectHandle( HashData, ( S5I ), ( 32 ), ( AddSpecialEffectTarget( "effects\\NetherInferno.mdx", P8I, "origin" ) ) )
            endif
            set H84 = ( 0.08 + SUI * 0.08 ) * QDI( WD5 - GetUnitState( P8I, UNIT_STATE_LIFE ), 0 )
            if H84 > 0 then
                call UYI( "+" + I2S( R2I( H84 ) ), 2, P8I, 0.023, 68, 0, 187, 216 )
            endif
        endif
        call DamageTarget( P7I, P8I, 1, 5 * SUI + H84 )
    endif
    set t = null
    set P7I = null
    set P8I = null
    return false
endfunction

function WE5 takes nothing returns nothing
    local trigger t = CreateTrigger( )
    local integer S5I = GetHandleId( t )
    local unit P7I = GetTriggerUnit( )
    local unit P8I = GetEnumUnit( )
    call DestroyEffect( AddSpecialEffectTarget( "effects\\NetherInferno.mdx", P8I, "origin" ) )
    call TriggerRegisterTimerEvent( t, 1, true )
    call TriggerRegisterDeathEvent( t, P8I )
    call TriggerAddCondition( t, Condition( function WC5 ) )
    call SaveUnitHandle( HashData, ( S5I ), ( 17 ), ( P8I ) )
    call SaveUnitHandle( HashData, ( S5I ), ( 2 ), ( P7I ) )
    call SaveReal( HashData, ( S5I ), ( 392 ), ( ( GetUnitState( P8I, UNIT_STATE_LIFE ) ) * 1.0 ) )
    call SaveEffectHandle( HashData, ( S5I ), ( 32 ), ( AddSpecialEffectTarget( "effects\\NetherInferno.mdx", P8I, "origin" ) ) )
    set t = null
    set P7I = null
    set P8I = null
endfunction

function WF5 takes nothing returns nothing
    local unit P7I = GetTriggerUnit( )
    local location l = GetSpellTargetLoc( )
    local real x = GetLocationX( l )
    local real y = GetLocationY( l )
    local group g = NTI( )
    local integer SUI = GetUnitAbilityLevel( P7I, 'A0NO' )
    call GroupEnumUnitsInRange( g, x, y, 180 + 25, Condition( function D01 ) )
    call ForGroup( g, function WE5 )
    call NSI( g )
    call RemoveLocation( l )
    set l = null
    set g = null
endfunction

function WG5 takes nothing returns boolean
    if GetSpellAbilityId( ) == 'A0NO' then
        call WF5( )
    endif
    return false
endfunction

function NI1 takes nothing returns nothing
    local trigger t = CreateTrigger( )
    call UMI( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( t, Condition( function WG5 ) )
    set t = null
endfunction
Как видишь все очень примитивно.Точно так же делаешь структуру с данными кто, где, когда. Нет смысла пытатся хранить сразу группу.